﻿// 拦截导弹(Noip1999).cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>

using namespace std;


/*
http://ybt.ssoier.cn:8088/problem_show.php?pid=1260
https://www.luogu.com.cn/problem/P1020   //语法繁琐

某国为了防御敌国的导弹袭击，发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷：
虽然它的第一发炮弹能够到达任意的高度，但是以后每一发炮弹都不能高于前一发的高度。某天，雷达捕捉到敌国的导弹来袭。
由于该系统还在试用阶段，所以只有一套系统，因此有可能不能拦截所有的导弹。

输入导弹依次飞来的高度（雷达给出的高度数据是不大于30000的正整数，导弹数不超过1000），计算这套系统最多能拦截多少导弹，
如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。

【输入】
输入导弹依次飞来的高度。

【输出】
第一行：最多能拦截的导弹数；

第二行：要拦截所有导弹最少要配备的系统数。

【输入样例】
389 207 155 300 299 170 158 65
【输出样例】
6
2
*/


const int N = 1010;
int arr[N]; int idx;
int dp[N];
int n;

void solve() {
	int ans = 0;
	dp[0] = 1;
	for (int i = 1; i < idx; i++) {
		dp[i] = 1;
		for (int j = 0; j < i; j++) {
			if (arr[j] >= arr[i]) {
				dp[i] = max(dp[i], dp[j] + 1);
			}
		}
		ans = max(ans, dp[i]);
	}
	cout << ans << endl;

	memset(dp, 0, sizeof dp);
	ans = 0; dp[0] = 1;
	for (int i = 1; i < idx; i++) {
		dp[i] = 1;
		for (int j = 0; j < i; j++) {
			if (arr[j] < arr[i]) {
				dp[i] = max(dp[i], dp[j] + 1);
			}
		}
		ans = max(ans, dp[i]);
	}

	cout << ans << endl;
}
/*
O(nlogn) 二分求dp
while(~scanf("%d",&arr[++i])){ cnt++;}
void solve(){
    memset(dp,0,sizeof dp);
    for(int i = 1;i<=cnt;i++){
        int val = arr[i];
        int l=1;int r = cnt;
        while(l<r){
            int mid = (l + r + 1) >> 1;
            if (dp[mid] >= val) {
                l = mid;
            }
            else {
                r = mid - 1;
            }
        }
        if(dp[l]<val){dp[l]=val;}
        else dp[l+1] =val;
    }

    int ans = 0;
    for(int i= cnt;i>=1;i--){
        if(dp[i] != 0){
            ans=i;break;
        }
    }
    cout << ans<<endl;

    memset(dp,0x3f,sizeof dp);
    for(int i= 1;i <=cnt;i++){
        int val = arr[i];
         int l=1;int r = cnt;
        while(l<r){
            int mid = l+r>>1;
            if(dp[mid]>=val)
                r=mid;
            else
                l = mid+1;
        }
        if(dp[l]>= val) dp[l] = val;
        else dp[l-1] = val;
    }
    ans = 0;
    for(int i= cnt;i>=1;i--){
        if(dp[i] != 0x3f3f3f3f){
            ans=i;break;
        }
    }
    cout << ans<<endl;
}
*/
int main()
{
	while (cin >> n) {
		arr[idx++] = n;
	}

	solve();

	return 0;
}